//
//  YGBaseViewController.swift
//  SwiftWebo
//
//  Created by 王勇 on 2018/5/26.
//  Copyright © 2018年 Brave. All rights reserved.
//

import UIKit

class YGBaseViewController: UIViewController {
    
    /// 用户登录标记
    var userLogin  = true
    
    //添加表格- 如果用户未登录不创建
    var tableView: UITableView?
    /// 刷新控件
    var refreshControl:UIRefreshControl?
    ///上拉刷新标记
    var isPullup = false
    //懒加 自定义导航条
    lazy var navigationBar = YGAutoNav(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 64))
    lazy var navItem = UINavigationItem()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupUI()
        loadData()
    }
    
    // 重写title
    override var title: String? {
        didSet{
            navItem.title = title
            
        }
    }
    
    // 加载数据 子类实现
    @objc func loadData(){
        //如果子类不实现任何方法 就关闭刷新控件
        refreshControl?.endRefreshing()
    }
    
    
}

// MARK: - 设置界面
extension YGBaseViewController {
    
   @objc func setupUI(){

      view.backgroundColor = UIColor(red: CGFloat(drand48()), green: CGFloat(drand48()), blue: CGFloat(drand48()), alpha: 1)
    
          // 取消自动缩进 如果隐藏了导航栏 自定义导航会缩进20个点
          automaticallyAdjustsScrollViewInsets = false
          setNavgationBar()
          userLogin ? setupTableView() : setupVisitorView()
    
    }
   
    ///用户未登录界面显示
    private func setupVisitorView() {
        
        let visitorView = YGVisitorView(frame: view.bounds)
        view.insertSubview(visitorView, belowSubview: navigationBar)
    
    }
    ///创建表格视图
    private func setupTableView() {
       
        tableView = UITableView(frame: view.bounds, style: .plain)
    
        if #available(iOS 11.0, *) {
            tableView?.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.never
        } else {
            // Fallback on earlier versions
        }
        view.insertSubview(tableView!, belowSubview: navigationBar)
        tableView?.estimatedRowHeight = 0
        tableView?.estimatedSectionFooterHeight = 0;
        tableView?.estimatedSectionHeaderHeight = 0;
        
       // 设置数据源代理 子类直接实现数据源方法
        tableView?.dataSource = self
        tableView?.delegate   = self
        
       // 设置内容缩进
         tableView?.contentInset = UIEdgeInsets(top: navigationBar.bounds.height,
                                                left: 0,
                                                bottom: tabBarController?.tabBar.bounds.height ?? 49,
                                                right: 0)
        // 设置刷新控件
        //1.实例化控件
        refreshControl = UIRefreshControl()
        //2.添加到tableview
        tableView?.addSubview(refreshControl!)
        //3.添加事件
        refreshControl?.addTarget(self, action: #selector(loadData), for: .valueChanged)
    }
    
    /// 设置导航条
    private func setNavgationBar() {
        // 添加导航条
        view.addSubview(navigationBar)
        // 将itme 设置给navBar
        navigationBar.items = [navItem]
        // 设置navBar的渲染颜色
        navigationBar.barTintColor = #colorLiteral(red: 0.9719446301, green: 0.9719673991, blue: 0.9719551206, alpha: 1)
        // 设置字体颜色
        navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor:UIColor.black]
        
    }
    
}


// MARK: - UITableViewDataSource,UITableViewDelegate
extension YGBaseViewController:UITableViewDataSource,UITableViewDelegate {
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    //基类提供方法 子类自己实现
    // 子类不需要 super
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    //在显示最后一行 上拉刷新
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        // 判断是否是最后一行
        let row = indexPath.row
        let section = tableView.numberOfSections - 1
        if row < 0 || section < 0 {
            return
        }
       
        // 共有行数
        let count = tableView.numberOfRows(inSection: section)
        
        if row == (count - 1) && !isPullup {
            print("上拉刷新")
            
            isPullup = true
            //开始刷新
             loadData()
        }
        
        
        
    }
}
